home *** CD-ROM | disk | FTP | other *** search
/ Business & Presentations / Business and Presentations - Volume 1 (1995)(Sideface)(NL).iso / hputils / dprint / dprint.pas < prev   
Pascal/Delphi Source File  |  1988-04-10  |  5KB  |  200 lines

  1. Program DoublePrint;
  2. {This is a program to print full 66 line pages on a laserjet back to back.
  3.  This cuts down the pages to half and the allows you to have a nicer printout.
  4.  This program is not very efficent and I appologize for the lack of elegance
  5.  but it is a prelude of things to come.
  6.  
  7.  Writen by
  8.  Kearn Kelley March 5th, 1988}
  9. uses
  10.   printer;
  11. const
  12.   esc = #27;
  13. var
  14.   X, Count, FFPos, LineCount, Page : integer;
  15.   Enter : char;
  16.   Line : string[132];
  17.   Filename : string[80];
  18.   Filvar : text;
  19.   Ioerr : boolean;
  20. procedure Write_Char(Charactor : char); {If an error occurs with the printer}
  21. begin                                   {Turbo will generate a run-time error}
  22.   {$I-}                                 {and abort so this procedure does}
  23.   Write(lst,Charactor);                 {it's own error checking}
  24.   if ioresult <>0 then
  25.     begin
  26.       writeln('Printer error. Please fix the printer and Press');
  27.       write('enter to continue or Cntl-C to Abort');
  28.       read(enter);
  29.       Write_Char(Charactor);
  30.     end;
  31.   {$I+}
  32. end;
  33. procedure Wrln(Lines : string);
  34. begin
  35.   for Count := 1 to length(Lines) do Write_Char(Lines[Count]);
  36.   Write_Char(#13);
  37. end;
  38. procedure Wr(Lines : string);
  39. begin
  40.   for Count := 1 to length(Lines) do Write_Char(Lines[Count]);
  41. end;
  42. procedure IOcheck;
  43. { Check for i/o error and print message if so}
  44. var
  45.   Iocode : integer;
  46.   Ch : char;
  47. begin
  48.   Iocode := ioresult;
  49.   Ioerr := (Iocode<>0);
  50.   if Ioerr then begin
  51.     case iocode of
  52.       $02   : writeln('File does not exist');
  53.     else
  54.       write('Unknown I/O error upon opening file');
  55.       write('Error Code ',iocode:3)
  56.     end;
  57.   end
  58. end;
  59. procedure Get_File;
  60. {opens the filename specified and readies it for input}
  61. begin
  62.   filename := paramstr(1);
  63.   if filename <> '' then
  64.     begin
  65.       {$i-}
  66.       assign(filvar,filename);
  67.       reset(filvar);
  68.       iocheck;
  69.     end;
  70.   if (filename = '') or (ioerr = true) then
  71.   repeat
  72.   begin
  73.     write('File you wish to Print ');
  74.     readln(filename);
  75.     {$i-}
  76.     assign(filvar,filename);
  77.     reset(filvar);
  78.     iocheck;
  79.   end;
  80.   until (ioerr = false);
  81.   {$i+}
  82. end;
  83. begin
  84.   get_file;
  85.   line := esc + '&l7.27c67F';         {This is the only Laserjet specific}
  86.   wr(line);                           {code.  This code tells the Laser to}
  87.   line := esc + '&k3G';               {use 7.27 lines per inch, 67 lines}
  88.   wr(line);                           {per page, to print a cr+lf for every}
  89.   linecount := 1;                     {cr, and a cr with every ff}
  90.   page := 1;
  91.   repeat
  92.     line := '';
  93.     readln(filvar,line);
  94.     FFPos := Pos(#12,line);
  95.     if FFPos <> 0 then
  96.       begin
  97.         if FFPos = length(line) then
  98.           begin
  99.             if page mod 2 = 1 then
  100.               begin
  101.                 wr(line);
  102.                 Page := Page +1;
  103.                 Linecount := 2;
  104.               end
  105.             else
  106.               begin
  107.                 line := '';
  108.                 wrln(line);
  109.                 Page := Page +1;
  110.                 Linecount := 2;
  111.               end;
  112.           end
  113.         else
  114.           begin
  115.             if page mod 2 = 1 then
  116.               begin
  117.                 wr(copy(line,1,ffpos));
  118.                 Page := Page + 1;
  119.                 Linecount := 2;
  120.               end
  121.             else
  122.               begin
  123.                 wrln(copy(line,ffpos+1,length(line)));
  124.                 Page := Page + 1;
  125.                 Linecount := 2;
  126.               end;
  127.           end;
  128.       end
  129.     else
  130.       begin
  131.         if page mod 2 = 1 then wrln(line);
  132.         linecount := linecount + 1;
  133.         if linecount = 67 then
  134.           begin
  135.             if page mod 2 = 1 then wr(#12);
  136.             linecount := 1;
  137.             Page := Page + 1;
  138.           end;
  139.       end;
  140.   until eof(filvar);
  141.   if (page mod 2 = 1) and (linecount <> 1) then wr(#12);
  142.   write('Press the enter key when ready');
  143.   read(enter);
  144.   reset(filvar);
  145.   linecount := 1;
  146.   page := 1;
  147.   repeat
  148.     line := '';
  149.     readln(filvar,line);
  150.     FFPos := Pos(#12,line);
  151.     if FFPos <> 0 then
  152.       begin
  153.         if FFPos = length(line) then
  154.           begin
  155.             if page mod 2 = 0 then
  156.               begin
  157.                 wr(line);
  158.                 Page := Page +1;
  159.                 Linecount := 2;
  160.               end
  161.             else
  162.               begin
  163.                 line := '';
  164.                 wrln(line);
  165.                 Page := Page +1;
  166.                 Linecount := 2;
  167.               end;
  168.           end
  169.         else
  170.           begin
  171.             if page mod 2 = 0 then
  172.               begin
  173.                 wr(copy(line,1,ffpos));
  174.                 Page := Page + 1;
  175.                 Linecount := 2;
  176.               end
  177.             else
  178.               begin
  179.                 wrln(copy(line,ffpos+1,length(line)));
  180.                 Page := Page + 1;
  181.                 Linecount := 2;
  182.               end;
  183.           end;
  184.       end
  185.     else
  186.       begin
  187.         if page mod 2 = 0 then wrln(line);
  188.         linecount := linecount + 1;
  189.         if linecount = 67 then
  190.           begin
  191.             if page mod 2 = 0 then wr(#12);
  192.             linecount := 1;
  193.             Page := Page + 1;
  194.           end;
  195.       end;
  196.   until eof(filvar);
  197. if (page mod 2 = 0) and (linecount <> 1) then wr(#12);
  198. line := esc + '&k0G';
  199. wr(line);
  200. end.